Python数据分析模块pandas之DataFrame数据框

373次阅读
没有评论

共计 3236 个字符,预计需要花费 9 分钟才能阅读完成。

DataFrame 数据框是一个表格型的数据结构,设计初衷是将 Series 的使用场景从一维拓展到多维。DataFrame 既有行索引,也有列索引。

  • 行索引:index
  • 列索引:columns
  • 值:values(NumPy 二维数组)

创建 DataFrame

字典嵌套列表创建数据框:

import pandas as pd

d = {"Name": ["Alex", "Bob", "Clarke"], "Age": [10, 11, 12]}
df = pd.DataFrame(d, index=["a", "b", "c"])  # 添加行索引
print(df)
# 输出
#      Name  Age
# a    Alex   10
# b     Bob   11
# c  Clarke   12

列表创建数据框:

data = [["Alex", 10], ["Bob", 11], ["Clarke", 12]]  # 嵌套列表
df = pd.DataFrame(data, columns=["Name", "Age"])  # 添加列标签索引
print(df)
# 输出
#      Name  Age
# 0    Alex   10
# 1     Bob   11
# 2  Clarke   12

列表嵌套字典创建数据框:

data = [{"Name": "Alex", "Age": 12}, {"Name": "Bob", "Age": 16, "Sex": "0"}]
df = pd.DataFrame(data)
print(df)
# 输出
#    Name  Age  Sex
# 0  Alex   12  NaN
# 1   Bob   16    0

基本属性和方法

d = {"Name": ["Alex", "Bob", "Clarke"], "Age": [10, 11, 12]}
df = pd.DataFrame(d, index=["a", "b", "c"])
print(df.shape)  # 形状,查看维度,几行几列
print(df.columns)  # 列索引
print(df.index)  # 行索引
print(df.values)  # 二维数组数据
print(df.dtypes)  # 查看每列数据类型
print(df.Age.dtype)  # 查看指定列数据类型

print(df.describe())  # 查看每列描述性统计量
print(df.info())  # 查看数据框基本信息,维度、列名称、数据格式、所占空间等
print(df.head(2))  # 查看前几条数据,默认 5
print(df.tail(2))  # 查看后几条数据,默认 5 

索引

列索引

对列进行索引,通过类似字典的方式,或通过属性的方式。

可以将 DataFrame 的列获取为一个 Series,返回的 Series 拥有原 DataFrame 相同的索引,且 name 属性也已经设置好了,就是相应的列名。

列索引选取数据列:

d = {"Name": ["Alex", "Bob"], "Age": [10, 11], "Sex": [0, 1]}
df = pd.DataFrame(d)
print(df["Age"])  ## 或 df.Age
# 输出
# 0    10
# 1    11
# Name: Age, dtype: int64

print(df[["Name", "Sex"]])  # 一次取多列得到的类型是:数据框

行索引

数据框默认先取列索引,不能直接取行索引,取行索引使用.loc[]加 index,或使用.iloc[]加整数来取行索引。同样返回一个 Series,index 为原来的 columns。

行索引选取数据行:

d = {"Name": ["Alex", "Bob", "Clarke"], "Age": [10, 11, 18], "Sex": [0, 1, 0]}
df = pd.DataFrame(d, index=["a", "b", "c"])
print(df.loc["a"])
# 输出
# Name    Alex
# Age       10
# Sex        0
# Name: a, dtype: object

print(df.loc[["a", "c"]])  # 一次取多行得到的类型是:数据框
print(df.iloc[[0, 2]])

元素索引

print(df["Name"]["a"])  # 先取列,再取行
print(df.loc["a"]["Name"])  # 先取行,再取列
print(df.loc["a", "Name"])  # Alex
print(df.iloc[0, 0])  # Alex

层次化索引

创建多层行索引,隐式构造:

index = [["1 班 ", "1 班 ", "1 班 ", "2 班 ", "2 班 ", "2 班 "],
    [" 张三 ", " 李四 ", " 王五 ", " 赵六 ", " 孙七 ", " 周八 "],
]
columns = [[" 期中 ", " 期中 ", " 期中 ", " 期末 ", " 期末 ", " 期末 "],
    [" 语文 ", " 数学 ", " 英语 ", " 语文 ", " 数学 ", " 英语 "],
]
data = [[70, 80, 88, 85, 66, 97],
    [90, 87, 78, 85, 95, 77],
    [70, 80, 88, 75, 96, 95],
    [75, 84, 80, 85, 76, 97],
    [71, 80, 68, 85, 96, 87],
    [70, 81, 88, 85, 96, 93],
]
df = pd.DataFrame(data, index=index, columns=columns)
print(df)

"""
        期中          期末        
        语文 数学 英语 语文 数学 英语
1 班 张三  70  80  88   85  66   97
    李四  90  87  78   85  95   77
    王五  70  80  88   75  96   95
2 班 赵六  75  84  80   85  76   97
    孙七  71  80  68   85  96   87
    周八  70  81  88   85  96   93
"""

显示构造,pd.MultiIndex.from_arrays()使用数组,还可以使用元组 from_tuples(),使用笛卡尔积 from_product()。

索引堆叠

index = pd.MultiIndex.from_product([["1 班 ", "2 班 "], [" 张三 ", " 李四 ", " 王五 "]])
columns = pd.MultiIndex.from_product([[" 期中 ", " 期末 "], [" 语文 ", " 数学 ", " 英语 "]])
data = [[70, 80, 88, 85, 66, 97],
    [90, 87, 78, 85, 95, 77],
    [70, 80, 88, 75, 96, 95],
    [75, 84, 80, 85, 76, 97],
    [71, 80, 68, 85, 96, 87],
    [70, 81, 88, 85, 96, 93],
]

df = pd.DataFrame(data, index=index, columns=columns)
df2 = df.stack()  # 默认将最里层列索引变成行索引
df3 = df2.unstack()  # 将行索引变成列索引

切片

直接用中括号时:索引优先对列进行操作,切片优先对行进行操作。

行切片:

d = {"Name": ["Alex", "Bob", "Clarke"], "Age": [10, 11, 18], "Sex": [0, 1, 0]}
df = pd.DataFrame(d, index=["a", "b", "c"])
print(df[0:2])  # 左闭右开
print(df["a":"c"])  # 左闭右闭

列切片,须先进行行切片:

print(df.loc[:, "Name":"Sex"])
print(df.iloc[:, 0:2])

总结:

  • 取一行或一列:索引
  • 取连续的多行或多列:切片
  • 取不连续多行或多列:中括号

DataFrame 运算

DataFrame 之间的运算,会自动对齐索引进行运算。如果索引不对应,则补 NaN,DataFrame 没有广播机制。同样,可以使用 add()函数来填充数据。

聚合函数

d = [[4, 1, 9], [2, 1, 8], [1, 3, 2]]
df = pd.DataFrame(d)
df.count()  # 非空元素的数量
df.values.sum()  # 所有数之和
df.sum()  # 默认 axis=0,对列求和
df.mean()  # 平均值
df.max()  # 最大值,最小值为 min()
df.median()  # 中位数
df.std()  # 标准差,方差为 var()

df.value_counts()  # 统计元素出现次数
df.cumsum()  # 累加
df.cov()  # 协方差
df.corr()  # 所有特征相关系数
df.corrwith(df[1])  # 单一特征相关系数

正文完
 0
阿伯手记
版权声明:本站原创文章,由 阿伯手记 于2024-01-18发表,共计3236字。
转载说明:本站原创内容,除特殊说明外,均基于 CC BY-NC-SA 4.0 协议发布,转载须注明出处与链接。
评论(没有评论)
验证码

阿伯手记

阿伯手记
阿伯手记
喜欢编程,头发渐稀;成长路上,宝藏满地
文章数
767
评论数
207
阅读量
683311
今日一言
-「
热门文章
职场救急!AI请假话术生成器:1秒定制高通过率理由

职场救急!AI请假话术生成器:1秒定制高通过率理由

超级借口 不好开口?借口交给我!智能生成工作请假、上学请假、饭局爽约、约会拒绝、邀约推辞、万能借口等各种借口理...
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
TVAPP:开源电视盒子资源库,一键打造家庭影院

TVAPP:开源电视盒子资源库,一键打造家庭影院

导语 TVAPP 是一个专为 Android TV 电视盒子用户打造的开源影音资源库,集成了影视、直播、游戏等...
巴别英语:用美剧和TED演讲轻松提升英语听力与口语

巴别英语:用美剧和TED演讲轻松提升英语听力与口语

还在为枯燥的英语学习而烦恼吗?巴别英语通过创新的美剧学习模式,让英语学习变得生动有趣。平台提供海量美剧和 TE...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
2025年12月 每日精选

2025年12月 每日精选

关于每日精选栏目 发现一些不错的资源,点击 这里 快速投稿。 12 月 26 日 .ax 顶级域 目前全球唯一...
123云盘限时福利:登录即送1个月VIP尊享权益!

123云盘限时福利:登录即送1个月VIP尊享权益!

🎁  零成本体验 20T 超大空间与会员加速通道 🎉 活动亮点 登录即送:无需任何复杂操作,登录账号直接领取 ...
最新评论
阿伯手记 阿伯手记 发了:https://aboss.top/moments/1064
吴蛋蛋 吴蛋蛋 快发小年快乐
吴蛋蛋 吴蛋蛋 Ask4Me,这个之前看server酱接入了
15220202929 15220202929 怎么用
八对 八对 麻烦大佬更新下【堆新】的友链站名:八对星星描述:极目星视穹苍无界•足履行者大地有疆链接:https://8dui.com图标:https://cf.8dui.com/logo.webp横标:https://cf.8dui.com/logo-w.webp订阅:https://8dui.com/rss.xml
三毛笔记 三毛笔记 已添加
DUINEW DUINEW 已添加贵站,期待贵站友链~博客名称:堆新博客地址:https://duinew.com/博客描述:堆新堆新,引力向新!——堆新(DUINEW)博客头像:https://d.duinew.com/logo.webp横版头像:https://d.duinew.com/logo-w.webp博客订阅:https://duinew.com/rss.xml
hedp hedp 没看懂
bingo bingo 直接生成就可以啦,也可以添加一些选项
热评文章
夸克网盘快传助手提高非VIP下载速度

夸克网盘快传助手提高非VIP下载速度

夸克网盘限速这个大家都知道,不开会员差不多限速在几百 K。那有没有办法在合法合规途径加速下载夸克网盘呢?这里推...
Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 免费开源短网址程序,基于Fastify、Vercel和Supabase构建

Short-Link 是一款基于 Fastify、Vercel 和 Supabase 构建的 URL 缩短服务...
清华大学官方免费DeepSeek教程

清华大学官方免费DeepSeek教程

AI 领域近期最引人注目的焦点当属 DeepSeek,这款由中国创新企业深度求索研发的人工智能工具,正以开放源...
Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 在线中文姓名生成器

Chinese Name Generator 是一款在线中文姓名生成器,可在几秒内生成符合个人需求的中文名字。...
2026年2月 每日精选

2026年2月 每日精选

关于每日精选栏目 发现一些不错的资源,点击 这里 快速投稿。 2 月 17 日 国家全民健身信息服务平台 过年...
DrawLink:一键生成链接视觉卡片,提升分享点击率

DrawLink:一键生成链接视觉卡片,提升分享点击率

小贴士 :此站或已变迁,但探索不止步。我们已为您备好「类似网站」精选合集,相信其中的发现同样能为您带来惊喜。
WebRTC Screen Mirror:基于浏览器免费开源投屏神器,可实现低延迟、跨平台屏幕共享

WebRTC Screen Mirror:基于浏览器免费开源投屏神器,可实现低延迟、跨平台屏幕共享

WebRTC Screen Mirror 是一款基于 WebRTC 技术的在线屏幕共享工具,它利用浏览器内置的...